const searchFilters = {
  // 区间类型条件的选择

  // 区间类型条件结构
  // ranges: [
  //     {
  //         type: 'price',  // 筛选类型/字段
  //         low: 3000,  // 最小值
  //         high: 6000  // 最大值
  //     }
  // ]

  rangesFilter: function(datas, ranges) {
    if (ranges.length === 0) {
      return datas;
    } else {
      for (let range of ranges) {
        datas = datas.filter(function(item) {
          return (
            item[range.type] >= range.low && item[range.type] <= range.high
          );
        });
      }
      return datas;
    }
  },

  // 选择类型条件的选择
  // 选择类型条件结构
  // chooses: [
  //     {
  //         type: 'brand',
  //         value: '华为'
  //     },
  //     {
  //         type: 'brand',
  //         value: '苹果'
  //     }
  // ]
  choosesFilter: function(datas, chooses) {
    let tmpDatas = datas;
    if (chooses.length === 0) {
    } else {
      for (let choose of chooses) {
        tmpDatas = tmpDatas.filter(function(item) {
          let reg = new RegExp(choose.value, "i"); //搜索内容（模糊匹配）
          let str = "";
          switch (choose.type) {
            case "userName": //餐厅评价的用户名
              str = item.user.userName;
              break;
            case "reviewStatus": //餐厅评价的状态
              str = item.evaluationRestaurant.reviewStatus;
              break;
            case "canteenContent": //餐厅评价的内容
              str = item.evaluationRestaurant.evaluationContent;
              break;
            case "userNameCuisine": //菜系评价的用户名
              str = item.userName;
              break;
            case "reviewCuisineStatus": //菜系评价的状态
              str = item.reviewStatus;
              break;
            case "dishName": //菜系评价的菜名
              str = item.dishName;
              break;
            case "cuisineContent": //菜系评价的内容
              str = item.evaluationContent;
              break;
            case "status": //意见反馈的状态
              str = item.feedback.status;
              break;
            case "feedbackPerson": //意见反馈人
              str = item.feedbackPerson;
              break;
            case "content": //意见反馈的内容
              str = item.feedback.content;
              break;
          }
          return reg.test(str);
          // let dataKey =
          //   choose.type === "userName" ? "user" : "evaluationRestaurant";
          // return reg.test(item[dataKey][choose.type]);
        });
      }
    }
    return tmpDatas;
  }
};
function doFilter(datas, conditions) {
  // 根据条件循环调用筛选器里的方法
  for (let key in conditions) {
    // 判断是否有需要的过滤方法
    if (
      searchFilters.hasOwnProperty(key + "Filter") &&
      typeof searchFilters[key + "Filter"] === "function"
    ) {
      datas = searchFilters[key + "Filter"](datas, conditions[key]);
    }
  }
  return datas;
}
export default doFilter;
